/**
 * @author MIAO
 * Created on 2011-11-13
 * For more information, please visit:ismiao.com
 */
package com.ismiao.java.Callback.example3;

public class Child {
	public void getOff(String station) {
		System.out.println(getClass().getSimpleName() + " get off at the "
				+ station);
	}

	public static void main(String[] args) {
		Child childA = new Child();
		TicketSaller saller = new TicketSaller(childA);
		saller.remindTheStation("Century Avune");
	}
	/**
	 * 可以看到输出内容：TicketSaller:Passengeres, the Century Avune has arrived!
	 *                Child get off at the Century Avune
	 * 通常公交车上不止一个乘客，售票员提醒到站的时候，不止一个乘客会下车。
	 * 即在TicketSaller中维护一个Passenger的List，remindTheStation()中回调List中每一个Passenger的方法。
	 * 在实际应用中，通常会定义一个回调函数的接口
	 *     public interface ICallback {
	 *          public void onExecute();
	 *     }
	 * 每一个需要回调的客户端实现这个接口
	 *     Class ChildA implements ICallback {
	 *          public void onExecute() {
	 *               //
	 *          }
	 *     }
	 *     Class ChildB implements ICallback {
	 *          public void onExecute() {
	 *               //
	 *          }
	 *     }
	 *     .......
	 *     Class TicketSaller {
	 *          private Vector<ICallback> passengeres = new Vector<ICallback>();
	 *          public synchronzied void addPassenger(ICallback callback) {
	 *              passengeres.add(callback);
	 *          }
	 *          public synchronzied void removeaddPassenger(ICallback callback) {
	 *              passengeres.remove(callback);
	 *          }
	 *          public void send() {
	 *              ..........
	 *              for(ICallback callback : passengeres) {
	 *                  callback.onExecute();
	 *              }
	 *          }
	 *          public void notifyTheStation(String station) {
	 *             //do sth....
	 *             send();
	 *          }
	 *     }
	 *  回调的好处在于客户端和服务端解耦，实现异步消息处理。
	 *  在Android中随处可见，一些RPC机制中用的也很多。
	 */
}
